package api;

import api.loader.OFDLoader;
import api.tools.PDFTool;
import com.alibaba.fastjson.JSONObject;
import com.pansoft.xbrl.xbrljson.convert.JsonToXbrl;
import com.pansoft.xbrl.xbrljson.convert.XbrlToJson;
import com.pansoft.xbrl.xbrljson.util.PropUtil;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.io.File;

public class VoucherFileUtil {

    private static Log log = LogFactory.getLog(VoucherFileUtil.class);
    private static String DEFAULT_ISSUER_XBRL_FILENAME = "voucher_issuer.xbrl";

    static{
        PropUtil.initFileMap("VoucherType"); // 加载票据类型
    }
    /**
     * 从OFD中解析出XBRL文件
     * @param ofdFilePath ofd文件路径
     * @return XBRL文件
     */
    public static VoucherFileInfo extractXBRLFromOFD(String ofdFilePath) throws Exception{
        return extractXBRLFromOFD(ofdFilePath,"");
    }

    /**
     * 从OFD中解析出XBRL文件
     * @param ofdFilePath ofd文件路径
     * @param outputFile xbrl文件存储名称
     * @return XBRL文件
     * @throws Exception
     */
    public static VoucherFileInfo extractXBRLFromOFD(String ofdFilePath, String outputFile) throws Exception{
        VoucherFileInfo voucherFileInfo = new OFDLoader().extractAttach(ofdFilePath,outputFile);
        return voucherFileInfo;
    }

    /**
     * 从PDF中提取XBRL文件
     * @param pdfFilePath pdf文件路径
     * @return XBRL文件
     */
    public static VoucherFileInfo extractXBRLFromPDF(String pdfFilePath){
        return extractXBRLFromPDF(pdfFilePath, "");
    }

    /**
     * 从PDF中提取XBRL文件
     * @param pdfFilePath pdf文件路径
     * @return XBRL文件
     */
    public static VoucherFileInfo extractXBRLFromPDF(String pdfFilePath, String outputFile){
        return PDFTool.extractXBRLFileFromPDF(pdfFilePath, DEFAULT_ISSUER_XBRL_FILENAME, outputFile);
    }

    /**
     * xbrl转json
     * @param xbrlXml xbrl文件的内容
     * @param configId 模板编号
     * @return Json数据对象
     */
    public static JSONObject xbrl2Json(String xbrlXml, String configId){
        return new XbrlToJson().convertXbrlJsonData (xbrlXml, configId);
    }

    /**
     * json转xbrl
     * @param jsonValue json数据
     * @param configId 模板编号
     * @return xbrl数据
     */
    public static String json2Xbrl(String jsonValue, String configId) throws Exception {
        return new JsonToXbrl().convertXbrlXml(jsonValue, configId);
    }
}
